home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / games / ippon / source.lzh / shot.c < prev    next >
C/C++ Source or Header  |  2000-07-07  |  2KB  |  91 lines

  1. /* shot.c */
  2.  
  3. #include <stdio.h>
  4. #include <xsp2lib.h>
  5.  
  6. #include "main.h"
  7. #include "player.h"
  8. #include "enemy.h"
  9. #include "shot.h"
  10. #include "sound.h"
  11.  
  12.  
  13. #define PALET_SHOT        0x0800
  14.  
  15. #define SHOT_SPEED    31
  16.  
  17. static SHOT _shot;        /* ワーク */
  18.  
  19.  
  20. /* ゲーム開始時に呼ばれる */
  21. void ShotInit (void)
  22. {
  23.     shot = &_shot;
  24.     shot->status = SHOT_STATUS_NON;
  25. }
  26.  
  27.  
  28.  
  29. /* ショット出現時に呼ばれる */
  30. void ShotAlloc (void)
  31. {
  32.     SHOT *p = shot;
  33.     if (p->status == SHOT_STATUS_FLY)
  34.         return;
  35.  
  36.     p->lx = (player->x) << 16;    /* ショットの座標は自機+(0,-16) */
  37.     p->ly = (player->y + 4) << 16;    /* 自機の少し上に出す */
  38.     p->pt = obj_shot;
  39.     p->info = PALET_SHOT | PRIORITY_SHOT;
  40.     p->vx = xytable[SHOT_SPEED][192].x;
  41.     p->vy = xytable[SHOT_SPEED][192].y;
  42.     p->hit_x = 3;
  43.     p->hit_y = 8;
  44.     p->erase_flag = 0;
  45.     p->enemy = NULL;
  46.     p->shot_count = 0;
  47.     p->status = SHOT_STATUS_FLY;
  48.  
  49.     SoundSetSE (SE_SHOT);    /* ショット発射音 */
  50. }
  51.  
  52.  
  53.  
  54. /* 垂直同期ごとに呼ばれる */
  55. void ShotMove (void)
  56. {
  57.     SHOT *p = shot;
  58.  
  59.     switch (p->status) {
  60.     case SHOT_STATUS_NON:
  61.         if (player->status == PLAYER_STATUS_ALIVE) {
  62.             p->x = (player->lx >> 16);
  63.             p->y = (player->ly >> 16);
  64.             p->pt = obj_shot;
  65.             p->info = PALET_SHOT | PRIORITY_SHOT;
  66.             xobj_set_st (p);
  67.         }
  68.         break;
  69.  
  70.     case SHOT_STATUS_FLY:
  71.         /* 速度を足して上位ワード(固定整数部)だけ取り出す */
  72.         p->x = (p->lx += p->vx) >> 16;
  73.         p->y = (p->ly += p->vy) >> 16;
  74.  
  75.         /* ショットが画面外に出たか? */
  76.         if (p->y < -16) {
  77.             p->status = SHOT_STATUS_NON;
  78.         } else {
  79.             xobj_set_st (p);
  80.         }
  81.         break;
  82.  
  83.     case SHOT_STATUS_STICK:
  84.         p->x = ((p->lx = p->enemy->lx) >> 16) + p->off_x;
  85.         p->y = ((p->ly = p->enemy->ly) >> 16) + p->off_y;
  86.         xobj_set_st (p);
  87.         break;
  88.     }
  89.  
  90. }
  91.